@@ -110,8 +110,9 @@ urlpatterns += [  | 
            ||
| 110 | 110 | 
                 | 
            
| 111 | 111 | 
                # 微信授权相关  | 
            
| 112 | 112 | 
                urlpatterns += [  | 
            
| 113 | 
                - url(r'^get_openid$', wechat_views.get_openid, name='get_openid'),  | 
            |
| 114 | 
                - url(r'^to_redirect$', wechat_views.to_redirect, name='to_redirect'),  | 
            |
| 113 | 
                + url(r'^wx_oauth2$', wechat_views.wx_oauth2, name='wx_oauth2'),  | 
            |
| 114 | 
                + url(r'^base_redirect$', wechat_views.base_redirect, name='base_redirect'),  | 
            |
| 115 | 
                + url(r'^userinfo_redirect$', wechat_views.userinfo_redirect, name='userinfo_redirect'),  | 
            |
| 115 | 116 | 
                ]  | 
            
| 116 | 117 | 
                 | 
            
| 117 | 118 | 
                # 微信分享相关  | 
            
                @@ -273,7 +273,8 @@ WECHAT = {
               | 
            ||
| 273 | 273 | 
                },  | 
            
| 274 | 274 | 
                }  | 
            
| 275 | 275 | 
                 | 
            
| 276 | 
                -WECHAT_REDIRECT_URI = 'http://api.pai.ai/to_redirect'  | 
            |
| 276 | 
                +WECHAT_BASE_REDIRECT_URI = 'http://api.pai.ai/base_redirect'  | 
            |
| 277 | 
                +WECHAT_USERINFO_REDIRECT_URI = 'http://api.pai.ai/userinfo_redirect'  | 
            |
| 277 | 278 | 
                 | 
            
| 278 | 279 | 
                 WECHAT_OAUTH2_AUTHORIZE = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={redirect_uri}&response_type=code&scope={scope}&state={state}#wechat_redirect'
               | 
            
| 279 | 280 | 
                 WECHAT_OAUTH2_ACCESS_TOKEN = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code'
               | 
            
                @@ -17,23 +17,38 @@ WECHAT = settings.WECHAT  | 
            ||
| 17 | 17 | 
                 JSAPI = WECHAT.get('JSAPI', {})
               | 
            
| 18 | 18 | 
                 | 
            
| 19 | 19 | 
                 | 
            
| 20 | 
                -def get_openid(request):  | 
            |
| 20 | 
                +def wx_oauth2(request):  | 
            |
| 21 | 21 | 
                     scope = request.GET.get('scope', 'snsapi_userinfo')
               | 
            
| 22 | 22 | 
                     redirect_url = request.GET.get('redirect_url', '')
               | 
            
| 23 | 23 | 
                     default_url = request.GET.get('default_url', '')
               | 
            
| 24 | 24 | 
                 | 
            
| 25 | 
                + redirect_uri = settings.WECHAT_USERINFO_REDIRECT_URI if scope == 'snsapi_userinfo' else settings.WECHAT_BASE_REDIRECT_URI  | 
            |
| 26 | 
                +  | 
            |
| 25 | 27 | 
                if request.weixin:  | 
            
| 26 | 28 | 
                return redirect(settings.WECHAT_OAUTH2_AUTHORIZE.format(  | 
            
| 27 | 29 | 
                appid=JSAPI['appID'],  | 
            
| 28 | 
                - redirect_uri=urllib.quote_plus(settings.WECHAT_REDIRECT_URI),  | 
            |
| 30 | 
                + redirect_uri=urllib.quote_plus(redirect_uri),  | 
            |
| 29 | 31 | 
                scope=scope,  | 
            
| 30 | 32 | 
                state=urllib.quote_plus(redirect_url)  | 
            
| 31 | 33 | 
                ))  | 
            
| 32 | 34 | 
                 | 
            
| 33 | 
                - return redirect(default_url if default_url else redirect_url)  | 
            |
| 35 | 
                + return redirect(default_url or redirect_url)  | 
            |
| 36 | 
                +  | 
            |
| 37 | 
                +  | 
            |
| 38 | 
                +def base_redirect(request):  | 
            |
| 39 | 
                +    code = request.GET.get('code', '')
               | 
            |
| 40 | 
                +    state = request.GET.get('state', '')
               | 
            |
| 41 | 
                +  | 
            |
| 42 | 
                + access_info = requests.get(settings.WECHAT_OAUTH2_ACCESS_TOKEN.format(  | 
            |
| 43 | 
                + appid=JSAPI['appID'],  | 
            |
| 44 | 
                + secret=JSAPI['appsecret'],  | 
            |
| 45 | 
                + code=code  | 
            |
| 46 | 
                + ), verify=False).json()  | 
            |
| 47 | 
                +  | 
            |
| 48 | 
                + return redirect(furl(state).add(access_info).url)  | 
            |
| 34 | 49 | 
                 | 
            
| 35 | 50 | 
                 | 
            
| 36 | 
                -def to_redirect(request):  | 
            |
| 51 | 
                +def userinfo_redirect(request):  | 
            |
| 37 | 52 | 
                     code = request.GET.get('code', '')
               | 
            
| 38 | 53 | 
                     state = request.GET.get('state', '')
               | 
            
| 39 | 54 | 
                 | 
            
                @@ -42,9 +57,12 @@ def to_redirect(request):  | 
            ||
| 42 | 57 | 
                secret=JSAPI['appsecret'],  | 
            
| 43 | 58 | 
                code=code  | 
            
| 44 | 59 | 
                ), verify=False).json()  | 
            
| 45 | 
                -    unionid, openid, access_token = access_info.get('unionid', ''), access_info.get('openid', ''), access_info.get('access_token', '')
               | 
            |
| 60 | 
                +    openid, access_token = access_info.get('openid', ''), access_info.get('access_token', '')
               | 
            |
| 46 | 61 | 
                 | 
            
| 47 | 
                - res = requests.get(settings.WECHAT_OAUTH2_USERINFO.format(access_token=access_token, openid=openid), verify=False)  | 
            |
| 62 | 
                + res = requests.get(settings.WECHAT_OAUTH2_USERINFO.format(  | 
            |
| 63 | 
                + access_token=access_token,  | 
            |
| 64 | 
                + openid=openid  | 
            |
| 65 | 
                + ), verify=False)  | 
            |
| 48 | 66 | 
                res.encoding = 'utf-8'  | 
            
| 49 | 67 | 
                userinfo = res.json()  | 
            
| 50 | 68 | 
                 |